#ifndef SERVICE_ACTIONSERVICE_H
#define SERVICE_ACTIONSERVICE_H

#include <QObject>


namespace Notify {
class Notification;
}

namespace Contact {
class AbstractContact;
}

namespace Emotion {
class AbstractEmotion;
}

namespace Service {

class ActionService : public QObject
{
    Q_OBJECT
public:
    explicit ActionService(QObject *parent = 0);

private:
    static ActionService *m_instance;

signals:
    void buzz() const;
    void showEmotion() const;
    void transferFile() const;
    void recordVoice() const;

    void notificationClicked(const Notify::Notification *notification) const;
    void notifyWidgetGeometryChanged();
    void notificationWidgetClosed() const;

    void contactClicked(Contact::AbstractContact *contact) const;
    void contactTabClicked(int index) const;
    void showChatPage() const;

    void emotionClicked(Emotion::AbstractEmotion *emotion) const;
    void emotionEntered(Emotion::AbstractEmotion *emotion) const;
    void emotionLeft() const;

    void mouseMoving(const QPoint &globalPos);

public:
    static ActionService *instance();

public slots:
    void onBuzz() const;
    void onShowEmotion() const;
    void onTransferFile() const;
    void onRecordVoice() const;

    void onNotificationClicked(const Notify::Notification *notification) const;
    void onNotifyWidgetGeometryChanged();
    void onNotificationWidgetClosed() const;

    void onContactClicked(Contact::AbstractContact *contact) const;
    void onContactTabClick(int index) const;
    void onShowChatPage() const;

    void onEmotionClicked(Emotion::AbstractEmotion *emotion) const;
    void onEmotionEntered(Emotion::AbstractEmotion *emotion) const;
    void onEmotionLeft() const;

    void onMouseMoving(const QPoint &globalPos);
};

} // namespace Service

#endif // SERVICE_ACTIONSERVICE_H
